home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / pcap-bpf.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-03-29  |  21.9 KB  |  698 lines

  1. /*-
  2.  * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
  3.  *    The Regents of the University of California.  All rights reserved.
  4.  *
  5.  * This code is derived from the Stanford/CMU enet packet filter,
  6.  * (net/enet.c) distributed as part of 4.3BSD, and code contributed
  7.  * to Berkeley by Steven McCanne and Van Jacobson both of Lawrence 
  8.  * Berkeley Laboratory.
  9.  *
  10.  * Redistribution and use in source and binary forms, with or without
  11.  * modification, are permitted provided that the following conditions
  12.  * are met:
  13.  * 1. Redistributions of source code must retain the above copyright
  14.  *    notice, this list of conditions and the following disclaimer.
  15.  * 2. Redistributions in binary form must reproduce the above copyright
  16.  *    notice, this list of conditions and the following disclaimer in the
  17.  *    documentation and/or other materials provided with the distribution.
  18.  * 3. All advertising materials mentioning features or use of this software
  19.  *    must display the following acknowledgement:
  20.  *      This product includes software developed by the University of
  21.  *      California, Berkeley and its contributors.
  22.  * 4. Neither the name of the University nor the names of its contributors
  23.  *    may be used to endorse or promote products derived from this software
  24.  *    without specific prior written permission.
  25.  *
  26.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  27.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  28.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  29.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  30.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  31.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  32.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  33.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  34.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  35.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  36.  * SUCH DAMAGE.
  37.  *
  38.  *      @(#)bpf.h       7.1 (Berkeley) 5/7/91
  39.  *
  40.  * @(#) $Header: /tcpdump/master/libpcap/pcap-bpf.h,v 1.34.2.6 2005/08/13 22:29:47 hannes Exp $ (LBL)
  41.  */
  42.  
  43. /*
  44.  * This is libpcap's cut-down version of bpf.h; it includes only
  45.  * the stuff needed for the code generator and the userland BPF
  46.  * interpreter, and the libpcap APIs for setting filters, etc..
  47.  *
  48.  * "pcap-bpf.c" will include the native OS version, as it deals with
  49.  * the OS's BPF implementation.
  50.  *
  51.  * XXX - should this all just be moved to "pcap.h"?
  52.  */
  53.  
  54. #ifndef BPF_MAJOR_VERSION
  55.  
  56. #ifdef __cplusplus
  57. extern "C" {
  58. #endif
  59.  
  60. /* BSD style release date */
  61. #define BPF_RELEASE 199606
  62.  
  63. #ifdef MSDOS /* must be 32-bit */
  64. typedef long          bpf_int32;
  65. typedef unsigned long bpf_u_int32;
  66. #else
  67. typedef    int bpf_int32;
  68. typedef    u_int bpf_u_int32;
  69. #endif
  70.  
  71. /*
  72.  * Alignment macros.  BPF_WORDALIGN rounds up to the next 
  73.  * even multiple of BPF_ALIGNMENT. 
  74.  */
  75. #ifndef __NetBSD__
  76. #define BPF_ALIGNMENT sizeof(bpf_int32)
  77. #else
  78. #define BPF_ALIGNMENT sizeof(long)
  79. #endif
  80. #define BPF_WORDALIGN(x) (((x)+(BPF_ALIGNMENT-1))&~(BPF_ALIGNMENT-1))
  81.  
  82. #define BPF_MAXINSNS 512
  83. #define BPF_MAXBUFSIZE 0x8000
  84. #define BPF_MINBUFSIZE 32
  85.  
  86. /*
  87.  * Structure for "pcap_compile()", "pcap_setfilter()", etc..
  88.  */
  89. struct bpf_program {
  90.     u_int bf_len;
  91.     struct bpf_insn *bf_insns;
  92. };
  93.  
  94. /*
  95.  * Struct return by BIOCVERSION.  This represents the version number of 
  96.  * the filter language described by the instruction encodings below.
  97.  * bpf understands a program iff kernel_major == filter_major &&
  98.  * kernel_minor >= filter_minor, that is, if the value returned by the
  99.  * running kernel has the same major number and a minor number equal
  100.  * equal to or less than the filter being downloaded.  Otherwise, the
  101.  * results are undefined, meaning an error may be returned or packets
  102.  * may be accepted haphazardly.
  103.  * It has nothing to do with the source code version.
  104.  */
  105. struct bpf_version {
  106.     u_short bv_major;
  107.     u_short bv_minor;
  108. };
  109. /* Current version number of filter architecture. */
  110. #define BPF_MAJOR_VERSION 1
  111. #define BPF_MINOR_VERSION 1
  112.  
  113. /*
  114.  * Data-link level type codes.
  115.  *
  116.  * Do *NOT* add new values to this list without asking
  117.  * "tcpdump-workers@tcpdump.org" for a value.  Otherwise, you run the
  118.  * risk of using a value that's already being used for some other purpose,
  119.  * and of having tools that read libpcap-format captures not being able
  120.  * to handle captures with your new DLT_ value, with no hope that they
  121.  * will ever be changed to do so (as that would destroy their ability
  122.  * to read captures using that value for that other purpose).
  123.  */
  124.  
  125. /*
  126.  * These are the types that are the same on all platforms, and that
  127.  * have been defined by <net/bpf.h> for ages.
  128.  */
  129. #define DLT_NULL    0    /* BSD loopback encapsulation */
  130. #define DLT_EN10MB    1    /* Ethernet (10Mb) */
  131. #define DLT_EN3MB    2    /* Experimental Ethernet (3Mb) */
  132. #define DLT_AX25    3    /* Amateur Radio AX.25 */
  133. #define DLT_PRONET    4    /* Proteon ProNET Token Ring */
  134. #define DLT_CHAOS    5    /* Chaos */
  135. #define DLT_IEEE802    6    /* IEEE 802 Networks */
  136. #define DLT_ARCNET    7    /* ARCNET, with BSD-style header */
  137. #define DLT_SLIP    8    /* Serial Line IP */
  138. #define DLT_PPP        9    /* Point-to-point Protocol */
  139. #define DLT_FDDI    10    /* FDDI */
  140.  
  141. /*
  142.  * These are types that are different on some platforms, and that
  143.  * have been defined by <net/bpf.h> for ages.  We use #ifdefs to
  144.  * detect the BSDs that define them differently from the traditional
  145.  * libpcap <net/bpf.h>
  146.  *
  147.  * XXX - DLT_ATM_RFC1483 is 13 in BSD/OS, and DLT_RAW is 14 in BSD/OS,
  148.  * but I don't know what the right #define is for BSD/OS.
  149.  */
  150. #define DLT_ATM_RFC1483    11    /* LLC-encapsulated ATM */
  151.  
  152. #ifdef __OpenBSD__
  153. #define DLT_RAW        14    /* raw IP */
  154. #else
  155. #define DLT_RAW        12    /* raw IP */
  156. #endif
  157.  
  158. /*
  159.  * Given that the only OS that currently generates BSD/OS SLIP or PPP
  160.  * is, well, BSD/OS, arguably everybody should have chosen its values
  161.  * for DLT_SLIP_BSDOS and DLT_PPP_BSDOS, which are 15 and 16, but they
  162.  * didn't.  So it goes.
  163.  */
  164. #if defined(__NetBSD__) || defined(__FreeBSD__)
  165. #ifndef DLT_SLIP_BSDOS
  166. #define DLT_SLIP_BSDOS    13    /* BSD/OS Serial Line IP */
  167. #define DLT_PPP_BSDOS    14    /* BSD/OS Point-to-point Protocol */
  168. #endif
  169. #else
  170. #define DLT_SLIP_BSDOS    15    /* BSD/OS Serial Line IP */
  171. #define DLT_PPP_BSDOS    16    /* BSD/OS Point-to-point Protocol */
  172. #endif
  173.  
  174. /*
  175.  * 17 is used for DLT_OLD_PFLOG in OpenBSD;
  176.  *     OBSOLETE: DLT_PFLOG is 117 in OpenBSD now as well. See below.
  177.  * 18 is used for DLT_PFSYNC in OpenBSD; don't use it for anything else.
  178.  */
  179.  
  180. #define DLT_ATM_CLIP    19    /* Linux Classical-IP over ATM */
  181.  
  182. /*
  183.  * Apparently Redback uses this for its SmartEdge 400/800.  I hope
  184.  * nobody else decided to use it, too.
  185.  */
  186. #define DLT_REDBACK_SMARTEDGE    32
  187.  
  188. /*
  189.  * These values are defined by NetBSD; other platforms should refrain from
  190.  * using them for other purposes, so that NetBSD savefiles with link
  191.  * types of 50 or 51 can be read as this type on all platforms.
  192.  */
  193. #define DLT_PPP_SERIAL    50    /* PPP over serial with HDLC encapsulation */
  194. #define DLT_PPP_ETHER    51    /* PPP over Ethernet */
  195.  
  196. /*
  197.  * The Axent Raptor firewall - now the Symantec Enterprise Firewall - uses
  198.  * a link-layer type of 99 for the tcpdump it supplies.  The link-layer
  199.  * header has 6 bytes of unknown data, something that appears to be an
  200.  * Ethernet type, and 36 bytes that appear to be 0 in at least one capture
  201.  * I've seen.
  202.  */
  203. #define DLT_SYMANTEC_FIREWALL    99
  204.  
  205. /*
  206.  * Values between 100 and 103 are used in capture file headers as
  207.  * link-layer types corresponding to DLT_ types that differ
  208.  * between platforms; don't use those values for new DLT_ new types.
  209.  */
  210.  
  211. /*
  212.  * This value was defined by libpcap 0.5; platforms that have defined
  213.  * it with a different value should define it here with that value -
  214.  * a link type of 104 in a save file will be mapped to DLT_C_HDLC,
  215.  * whatever value that happens to be, so programs will correctly
  216.  * handle files with that link type regardless of the value of
  217.  * DLT_C_HDLC.
  218.  *
  219.  * The name DLT_C_HDLC was used by BSD/OS; we use that name for source
  220.  * compatibility with programs written for BSD/OS.
  221.  *
  222.  * libpcap 0.5 defined it as DLT_CHDLC; we define DLT_CHDLC as well,
  223.  * for source compatibility with programs written for libpcap 0.5.
  224.  */
  225. #define DLT_C_HDLC    104    /* Cisco HDLC */
  226. #define DLT_CHDLC    DLT_C_HDLC
  227.  
  228. #define DLT_IEEE802_11    105    /* IEEE 802.11 wireless */
  229.  
  230. /*
  231.  * 106 is reserved for Linux Classical IP over ATM; it's like DLT_RAW,
  232.  * except when it isn't.  (I.e., sometimes it's just raw IP, and
  233.  * sometimes it isn't.)  We currently handle it as DLT_LINUX_SLL,
  234.  * so that we don't have to worry about the link-layer header.)
  235.  */
  236.  
  237. /*
  238.  * Frame Relay; BSD/OS has a DLT_FR with a value of 11, but that collides
  239.  * with other values.
  240.  * DLT_FR and DLT_FRELAY packets start with the Q.922 Frame Relay header
  241.  * (DLCI, etc.).
  242.  */
  243. #define DLT_FRELAY    107
  244.  
  245. /*
  246.  * OpenBSD DLT_LOOP, for loopback devices; it's like DLT_NULL, except
  247.  * that the AF_ type in the link-layer header is in network byte order.
  248.  *
  249.  * OpenBSD defines it as 12, but that collides with DLT_RAW, so we
  250.  * define it as 108 here.  If OpenBSD picks up this file, it should
  251.  * define DLT_LOOP as 12 in its version, as per the comment above -
  252.  * and should not use 108 as a DLT_ value.
  253.  */
  254. #define DLT_LOOP    108
  255.  
  256. /*
  257.  * Encapsulated packets for IPsec; DLT_ENC is 13 in OpenBSD, but that's
  258.  * DLT_SLIP_BSDOS in NetBSD, so we don't use 13 for it in OSes other
  259.  * than OpenBSD.
  260.  */
  261. #ifdef __OpenBSD__
  262. #define DLT_ENC        13
  263. #else
  264. #define DLT_ENC        109
  265. #endif
  266.  
  267. /*
  268.  * Values between 110 and 112 are reserved for use in capture file headers
  269.  * as link-layer types corresponding to DLT_ types that might differ
  270.  * between platforms; don't use those values for new DLT_ types
  271.  * other than the corresponding DLT_ types.
  272.  */
  273.  
  274. /*
  275.  * This is for Linux cooked sockets.
  276.  */
  277. #define DLT_LINUX_SLL    113
  278.  
  279. /*
  280.  * Apple LocalTalk hardware.
  281.  */
  282. #define DLT_LTALK    114
  283.  
  284. /*
  285.  * Acorn Econet.
  286.  */
  287. #define DLT_ECONET    115
  288.  
  289. /*
  290.  * Reserved for use with OpenBSD ipfilter.
  291.  */
  292. #define DLT_IPFILTER    116
  293.  
  294. /*
  295.  * OpenBSD DLT_PFLOG; DLT_PFLOG is 17 in OpenBSD, but that's DLT_LANE8023
  296.  * in SuSE 6.3, so we can't use 17 for it in capture-file headers.
  297.  *
  298.  * XXX: is there a conflict with DLT_PFSYNC 18 as well?
  299.  */
  300. #ifdef __OpenBSD__
  301. #define DLT_OLD_PFLOG    17
  302. #define DLT_PFSYNC    18
  303. #endif
  304. #define DLT_PFLOG    117
  305.  
  306. /*
  307.  * Registered for Cisco-internal use.
  308.  */
  309. #define DLT_CISCO_IOS    118
  310.  
  311. /*
  312.  * For 802.11 cards using the Prism II chips, with a link-layer
  313.  * header including Prism monitor mode information plus an 802.11
  314.  * header.
  315.  */
  316. #define DLT_PRISM_HEADER    119
  317.  
  318. /*
  319.  * Reserved for Aironet 802.11 cards, with an Aironet link-layer header
  320.  * (see Doug Ambrisko's FreeBSD patches).
  321.  */
  322. #define DLT_AIRONET_HEADER    120
  323.  
  324. /*
  325.  * Reserved for Siemens HiPath HDLC.
  326.  */
  327. #define DLT_HHDLC        121
  328.  
  329. /*
  330.  * This is for RFC 2625 IP-over-Fibre Channel.
  331.  *
  332.  * This is not for use with raw Fibre Channel, where the link-layer
  333.  * header starts with a Fibre Channel frame header; it's for IP-over-FC,
  334.  * where the link-layer header starts with an RFC 2625 Network_Header
  335.  * field.
  336.  */
  337. #define DLT_IP_OVER_FC        122
  338.  
  339. /*
  340.  * This is for Full Frontal ATM on Solaris with SunATM, with a
  341.  * pseudo-header followed by an AALn PDU.
  342.  *
  343.  * There may be other forms of Full Frontal ATM on other OSes,
  344.  * with different pseudo-headers.
  345.  *
  346.  * If ATM software returns a pseudo-header with VPI/VCI information
  347.  * (and, ideally, packet type information, e.g. signalling, ILMI,
  348.  * LANE, LLC-multiplexed traffic, etc.), it should not use
  349.  * DLT_ATM_RFC1483, but should get a new DLT_ value, so tcpdump
  350.  * and the like don't have to infer the presence or absence of a
  351.  * pseudo-header and the form of the pseudo-header.
  352.  */
  353. #define DLT_SUNATM        123    /* Solaris+SunATM */
  354.  
  355. /* 
  356.  * Reserved as per request from Kent Dahlgren <kent@praesum.com>
  357.  * for private use.
  358.  */
  359. #define DLT_RIO                 124     /* RapidIO */
  360. #define DLT_PCI_EXP             125     /* PCI Express */
  361. #define DLT_AURORA              126     /* Xilinx Aurora link layer */
  362.  
  363. /*
  364.  * Header for 802.11 plus a number of bits of link-layer information
  365.  * including radio information, used by some recent BSD drivers as
  366.  * well as the madwifi Atheros driver for Linux.
  367.  */
  368. #define DLT_IEEE802_11_RADIO    127    /* 802.11 plus radiotap radio header */
  369.  
  370. /*
  371.  * Reserved for the TZSP encapsulation, as per request from
  372.  * Chris Waters <chris.waters@networkchemistry.com>
  373.  * TZSP is a generic encapsulation for any other link type,
  374.  * which includes a means to include meta-information
  375.  * with the packet, e.g. signal strength and channel
  376.  * for 802.11 packets.
  377.  */
  378. #define DLT_TZSP                128     /* Tazmen Sniffer Protocol */
  379.  
  380. /*
  381.  * BSD's ARCNET headers have the source host, destination host,
  382.  * and type at the beginning of the packet; that's what's handed
  383.  * up to userland via BPF.
  384.  *
  385.  * Linux's ARCNET headers, however, have a 2-byte offset field
  386.  * between the host IDs and the type; that's what's handed up
  387.  * to userland via PF_PACKET sockets.
  388.  *
  389.  * We therefore have to have separate DLT_ values for them.
  390.  */
  391. #define DLT_ARCNET_LINUX    129    /* ARCNET */
  392.  
  393. /*
  394.  * Juniper-private data link types, as per request from
  395.  * Hannes Gredler <hannes@juniper.net>.  The DLT_s are used
  396.  * for passing on chassis-internal metainformation such as
  397.  * QOS profiles, etc..
  398.  */
  399. #define DLT_JUNIPER_MLPPP       130
  400. #define DLT_JUNIPER_MLFR        131
  401. #define DLT_JUNIPER_ES          132
  402. #define DLT_JUNIPER_GGSN        133
  403. #define DLT_JUNIPER_MFR         134
  404. #define DLT_JUNIPER_ATM2        135
  405. #define DLT_JUNIPER_SERVICES    136
  406. #define DLT_JUNIPER_ATM1        137
  407.  
  408. /*
  409.  * Apple IP-over-IEEE 1394, as per a request from Dieter Siegmund
  410.  * <dieter@apple.com>.  The header that's presented is an Ethernet-like
  411.  * header:
  412.  *
  413.  *    #define FIREWIRE_EUI64_LEN    8
  414.  *    struct firewire_header {
  415.  *        u_char  firewire_dhost[FIREWIRE_EUI64_LEN];
  416.  *        u_char  firewire_shost[FIREWIRE_EUI64_LEN];
  417.  *        u_short firewire_type;
  418.  *    };
  419.  *
  420.  * with "firewire_type" being an Ethernet type value, rather than,
  421.  * for example, raw GASP frames being handed up.
  422.  */
  423. #define DLT_APPLE_IP_OVER_IEEE1394    138
  424.  
  425. /*
  426.  * Various SS7 encapsulations, as per a request from Jeff Morriss
  427.  * <jeff.morriss[AT]ulticom.com> and subsequent discussions.
  428.  */
  429. #define DLT_MTP2_WITH_PHDR    139    /* pseudo-header with various info, followed by MTP2 */
  430. #define DLT_MTP2        140    /* MTP2, without pseudo-header */
  431. #define DLT_MTP3        141    /* MTP3, without pseudo-header or MTP2 */
  432. #define DLT_SCCP        142    /* SCCP, without pseudo-header or MTP2 or MTP3 */
  433.  
  434. /*
  435.  * DOCSIS MAC frames.
  436.  */
  437. #define DLT_DOCSIS        143
  438.  
  439. /*
  440.  * Linux-IrDA packets. Protocol defined at http://www.irda.org.
  441.  * Those packets include IrLAP headers and above (IrLMP...), but
  442.  * don't include Phy framing (SOF/EOF/CRC & byte stuffing), because Phy
  443.  * framing can be handled by the hardware and depend on the bitrate.
  444.  * This is exactly the format you would get capturing on a Linux-IrDA
  445.  * interface (irdaX), but not on a raw serial port.
  446.  * Note the capture is done in "Linux-cooked" mode, so each packet include
  447.  * a fake packet header (struct sll_header). This is because IrDA packet
  448.  * decoding is dependant on the direction of the packet (incomming or
  449.  * outgoing).
  450.  * When/if other platform implement IrDA capture, we may revisit the
  451.  * issue and define a real DLT_IRDA...
  452.  * Jean II
  453.  */
  454. #define DLT_LINUX_IRDA        144
  455.  
  456. /*
  457.  * Reserved for IBM SP switch and IBM Next Federation switch.
  458.  */
  459. #define DLT_IBM_SP        145
  460. #define DLT_IBM_SN        146
  461.  
  462. /*
  463.  * Reserved for private use.  If you have some link-layer header type
  464.  * that you want to use within your organization, with the capture files
  465.  * using that link-layer header type not ever be sent outside your
  466.  * organization, you can use these values.
  467.  *
  468.  * No libpcap release will use these for any purpose, nor will any
  469.  * tcpdump release use them, either.
  470.  *
  471.  * Do *NOT* use these in capture files that you expect anybody not using
  472.  * your private versions of capture-file-reading tools to read; in
  473.  * particular, do *NOT* use them in products, otherwise you may find that
  474.  * people won't be able to use tcpdump, or snort, or Ethereal, or... to
  475.  * read capture files from your firewall/intrusion detection/traffic
  476.  * monitoring/etc. appliance, or whatever product uses that DLT_ value,
  477.  * and you may also find that the developers of those applications will
  478.  * not accept patches to let them read those files.
  479.  *
  480.  * Also, do not use them if somebody might send you a capture using them
  481.  * for *their* private type and tools using them for *your* private type
  482.  * would have to read them.
  483.  *
  484.  * Instead, ask "tcpdump-workers@tcpdump.org" for a new DLT_ value,
  485.  * as per the comment above, and use the type you're given.
  486.  */
  487. #define DLT_USER0        147
  488. #define DLT_USER1        148
  489. #define DLT_USER2        149
  490. #define DLT_USER3        150
  491. #define DLT_USER4        151
  492. #define DLT_USER5        152
  493. #define DLT_USER6        153
  494. #define DLT_USER7        154
  495. #define DLT_USER8        155
  496. #define DLT_USER9        156
  497. #define DLT_USER10        157
  498. #define DLT_USER11        158
  499. #define DLT_USER12        159
  500. #define DLT_USER13        160
  501. #define DLT_USER14        161
  502. #define DLT_USER15        162
  503.  
  504. /*
  505.  * For future use with 802.11 captures - defined by AbsoluteValue
  506.  * Systems to store a number of bits of link-layer information
  507.  * including radio information:
  508.  *
  509.  *    http://www.shaftnet.org/~pizza/software/capturefrm.txt
  510.  *
  511.  * but it might be used by some non-AVS drivers now or in the
  512.  * future.
  513.  */
  514. #define DLT_IEEE802_11_RADIO_AVS 163    /* 802.11 plus AVS radio header */
  515.  
  516. /*
  517.  * Juniper-private data link type, as per request from
  518.  * Hannes Gredler <hannes@juniper.net>.  The DLT_s are used
  519.  * for passing on chassis-internal metainformation such as
  520.  * QOS profiles, etc..
  521.  */
  522. #define DLT_JUNIPER_MONITOR     164
  523.  
  524. /*
  525.  * Reserved for BACnet MS/TP.
  526.  */
  527. #define DLT_BACNET_MS_TP    165
  528.  
  529. /*
  530.  * Another PPP variant as per request from Karsten Keil <kkeil@suse.de>.
  531.  *
  532.  * This is used in some OSes to allow a kernel socket filter to distinguish
  533.  * between incoming and outgoing packets, on a socket intended to
  534.  * supply pppd with outgoing packets so it can do dial-on-demand and
  535.  * hangup-on-lack-of-demand; incoming packets are filtered out so they
  536.  * don't cause pppd to hold the connection up (you don't want random
  537.  * input packets such as port scans, packets from old lost connections,
  538.  * etc. to force the connection to stay up).
  539.  *
  540.  * The first byte of the PPP header (0xff03) is modified to accomodate
  541.  * the direction - 0x00 = IN, 0x01 = OUT.
  542.  */
  543. #define DLT_PPP_PPPD        166
  544.  
  545. /*
  546.  * Names for backwards compatibility with older versions of some PPP
  547.  * software; new software should use DLT_PPP_PPPD.
  548.  */
  549. #define DLT_PPP_WITH_DIRECTION    DLT_PPP_PPPD
  550. #define DLT_LINUX_PPP_WITHDIRECTION    DLT_PPP_PPPD
  551.  
  552. /*
  553.  * Juniper-private data link type, as per request from
  554.  * Hannes Gredler <hannes@juniper.net>.  The DLT_s are used
  555.  * for passing on chassis-internal metainformation such as
  556.  * QOS profiles, cookies, etc..
  557.  */
  558. #define DLT_JUNIPER_PPPOE       167
  559. #define DLT_JUNIPER_PPPOE_ATM   168
  560.  
  561. #define DLT_GPRS_LLC        169    /* GPRS LLC */
  562. #define DLT_GPF_T        170    /* GPF-T (ITU-T G.7041/Y.1303) */
  563. #define DLT_GPF_F        171    /* GPF-F (ITU-T G.7041/Y.1303) */
  564.  
  565. /*
  566.  * Requested by Oolan Zimmer <oz@gcom.com> for use in Gcom's T1/E1 line
  567.  * monitoring equipment.
  568.  */
  569. #define DLT_GCOM_T1E1        172
  570. #define DLT_GCOM_SERIAL        173
  571.  
  572. /*
  573.  * Juniper-private data link type, as per request from
  574.  * Hannes Gredler <hannes@juniper.net>.  The DLT_ is used
  575.  * for internal communication to Physical Interface Cards (PIC)
  576.  */
  577. #define DLT_JUNIPER_PIC_PEER    174
  578.  
  579. /*
  580.  * Link types requested by Gregor Maier <gregor@endace.com> of Endace
  581.  * Measurement Systems.  They add an ERF header (see
  582.  * http://www.endace.com/support/EndaceRecordFormat.pdf) in front of
  583.  * the link-layer header.
  584.  */
  585. #define DLT_ERF_ETH        175    /* Ethernet */
  586. #define DLT_ERF_POS        176    /* Packet-over-SONET */
  587.  
  588. /*
  589.  * Requested by Daniele Orlandi <daniele@orlandi.com> for raw LAPD
  590.  * for vISDN (http://www.orlandi.com/visdn/).  Its link-layer header
  591.  * includes additional information before the LAPD header, so it's
  592.  * not necessarily a generic LAPD header.
  593.  */
  594. #define DLT_LINUX_LAPD        177
  595.  
  596. /*
  597.  * Juniper-private data link type, as per request from
  598.  * Hannes Gredler <hannes@juniper.net>. 
  599.  * The DLT_ are used for prepending meta-information
  600.  * like interface index, interface name
  601.  * before standard Ethernet, PPP, Frelay & C-HDLC Frames
  602.  */
  603. #define DLT_JUNIPER_ETHER       178
  604. #define DLT_JUNIPER_PPP         179
  605. #define DLT_JUNIPER_FRELAY      180
  606. #define DLT_JUNIPER_CHDLC       181
  607.  
  608. /*
  609.  * The instruction encodings.
  610.  */
  611. /* instruction classes */
  612. #define BPF_CLASS(code) ((code) & 0x07)
  613. #define        BPF_LD        0x00
  614. #define        BPF_LDX        0x01
  615. #define        BPF_ST        0x02
  616. #define        BPF_STX        0x03
  617. #define        BPF_ALU        0x04
  618. #define        BPF_JMP        0x05
  619. #define        BPF_RET        0x06
  620. #define        BPF_MISC    0x07
  621.  
  622. /* ld/ldx fields */
  623. #define BPF_SIZE(code)    ((code) & 0x18)
  624. #define        BPF_W        0x00
  625. #define        BPF_H        0x08
  626. #define        BPF_B        0x10
  627. #define BPF_MODE(code)    ((code) & 0xe0)
  628. #define        BPF_IMM     0x00
  629. #define        BPF_ABS        0x20
  630. #define        BPF_IND        0x40
  631. #define        BPF_MEM        0x60
  632. #define        BPF_LEN        0x80
  633. #define        BPF_MSH        0xa0
  634.  
  635. /* alu/jmp fields */
  636. #define BPF_OP(code)    ((code) & 0xf0)
  637. #define        BPF_ADD        0x00
  638. #define        BPF_SUB        0x10
  639. #define        BPF_MUL        0x20
  640. #define        BPF_DIV        0x30
  641. #define        BPF_OR        0x40
  642. #define        BPF_AND        0x50
  643. #define        BPF_LSH        0x60
  644. #define        BPF_RSH        0x70
  645. #define        BPF_NEG        0x80
  646. #define        BPF_JA        0x00
  647. #define        BPF_JEQ        0x10
  648. #define        BPF_JGT        0x20
  649. #define        BPF_JGE        0x30
  650. #define        BPF_JSET    0x40
  651. #define BPF_SRC(code)    ((code) & 0x08)
  652. #define        BPF_K        0x00
  653. #define        BPF_X        0x08
  654.  
  655. /* ret - BPF_K and BPF_X also apply */
  656. #define BPF_RVAL(code)    ((code) & 0x18)
  657. #define        BPF_A        0x10
  658.  
  659. /* misc */
  660. #define BPF_MISCOP(code) ((code) & 0xf8)
  661. #define        BPF_TAX        0x00
  662. #define        BPF_TXA        0x80
  663.  
  664. /*
  665.  * The instruction data structure.
  666.  */
  667. struct bpf_insn {
  668.     u_short    code;
  669.     u_char     jt;
  670.     u_char     jf;
  671.     bpf_int32 k;
  672. };
  673.  
  674. /*
  675.  * Macros for insn array initializers.
  676.  */
  677. #define BPF_STMT(code, k) { (u_short)(code), 0, 0, k }
  678. #define BPF_JUMP(code, k, jt, jf) { (u_short)(code), jt, jf, k }
  679.  
  680. #if __STDC__ || defined(__cplusplus)
  681. extern int bpf_validate(struct bpf_insn *, int);
  682. extern u_int bpf_filter(struct bpf_insn *, u_char *, u_int, u_int);
  683. #else
  684. extern int bpf_validate();
  685. extern u_int bpf_filter();
  686. #endif
  687.  
  688. /*
  689.  * Number of scratch memory words (for BPF_LD|BPF_MEM and BPF_ST).
  690.  */
  691. #define BPF_MEMWORDS 16
  692.  
  693. #ifdef __cplusplus
  694. }
  695. #endif
  696.  
  697. #endif
  698.